package serverproject.service;

import java.net.InetAddress;
import java.net.Socket;
import java.util.Collection;
import java.util.logging.Logger;

import javolution.util.FastList;

/**
 * ip주소를 기반으로 BanList를 작성하여 불량사용자가 채팅방에 접근하지 못하도록 해주는 Service
 * 
 * @author 201011832 김남중
 * 
 */
public class BanListService
{
	private static Collection<InetAddress>	banIpList	= new FastList<InetAddress>().shared();	// 멀티쓰레드환경에서의 안정성을위해 shared를 붙여
	@SuppressWarnings("unused")
	private static Collection<String>		banIdList	= new FastList<String>().shared();			// 멀티쓰레드환경에서의 안정성을위해 shared를 붙여
	// threadsafe한 자료구조
	// 생성

	private static Logger					logger		= Logger.getLogger("BanListService.class");

	public static final BanListService getInstance()
	{
		return SingletonHolder.instance;
	}

	@SuppressWarnings("synthetic-access")
	private static class SingletonHolder
	{
		protected static final BanListService	instance	= new BanListService();
	}

	/**
	 * ip주소를 기반으로 banlist에 등록되어있는 회원인지 판단
	 * 
	 * @param socket
	 * @return
	 */
	public boolean isIpBannedMember(Socket socket)
	{
		if (banIpList.contains(socket.getInetAddress()))
		{			
			return true;
		}

		return false;
	}

	/**
	 * 회원의 Ip주소를 차단
	 * 
	 * @param socket
	 */
	public void addIpBanList(Socket socket)
	{
		if (!isIpBannedMember(socket))
			banIpList.add(socket.getInetAddress());
		else
			logger.warning("이미 불량회원으로 등록된 IP 입니다.");
	}
}
